java中利用棧實現(xiàn)字符串回文算法
問題
給定一個由多個a和b組成的字符串數(shù)組,字符串中有一個特殊的字符X,位于字符串的正中間,例如(aaaabbbbXabaabbbb),如何判定該字符串是否回文
簡單算法
定義兩個下標分別指向字符串的頭和尾,每次比較兩個下標位置的值是否相等,如果不相等,那么輸入的
字符串不是回文,如果相等,左邊的下表加1,右邊的下表減1,重復上述步驟直至兩個下標都指向字符串的正中間或者確定字符串不是回文
/**
* 判斷字符串是否是回文
*/
public int isPalindrome(String inputStr) {
int i = 0;
int j = inputStr.length();
char[] chars = inputStr.toCharArray();
while (i < j && chars[i] == chars[j]) {
i++;
j--;
}
if (i < j) {
System.out.println("Not a Palindrome");
return 0;
} else {
System.out.println("Palindrome");
return 1;
}
}
利用棧判斷是否回文
1.遍歷字符數(shù)組,
2.在遍歷過程中將經(jīng)過的每個字符(X以前的字符)入棧
3.對于鏈表的后一半,把每個元素與棧頂元素比較,如果相等,執(zhí)行一次出棧操作,并且移動到下一個元素繼續(xù)比較
4.如果比較時出現(xiàn)不相等,那么輸入的字符串不是回文
5.繼續(xù)這個過程,直至棧空或者字符串不是回文
/**
* 利用棧判斷字符回文
*/
public boolean isPalindromeWithStack(String inputStr) {
char[] inputChar = inputStr.toCharArray();
LinkedListStack s = new LinkedListStack();
int i = 0;
while (inputChar[i] != 'X') {
s.push(inputChar[i]);
i++;
}
i++;
while (i < inputChar.length) {
if (s.isEmpty())
return false;
if (inputChar[i] != s.pop()) {
return false;
}
i++;
}
//將來
return true;
}
Java判斷是否為回文字符串
題目描述
輸入一段字符串序列,字符串可能包括字母,數(shù)字,標點符號等類型字符,在判斷該字符序列是否為回文時,只需判斷字母和數(shù)字類型,其它類型自動忽略。
如:“A man, a plan, a canal: Panama” 是一段回文字符串
“race a car”則不是回文字符串
實現(xiàn)方法
從字符串的兩端逐個進行比較,若遇到非字母或數(shù)字字符則將索引值加一或減一,如果兩端字符不同,直接返回false,直到索引值在中間相遇也沒有返回false則證明該字符串是回文字符串。
public static boolean isPalindrome(String str){
if(str.equals(""))
return true;
str = str.toLowerCase();//將字符串的所有大寫字母轉(zhuǎn)小寫
int start = 0, end = str.length() - 1;
//從字符兩端分別逐個對比字符,不同則直接返回false
while (start < end){
//過濾掉非字母和數(shù)字字符
while (!(str.charAt(start) >= 'a' && str.charAt(start) <= 'z' || str.charAt(start) >= '0' && str.charAt(start) <= '9'))
start++;
//過濾掉非字母和數(shù)字字符
while (!(str.charAt(end) >= 'a' && str.charAt(end) <= 'z' || str.charAt(end) >= '0' && str.charAt(end) <= '9'))
end--;
//若字符不同,則直接返回false
if(str.charAt(start) != str.charAt(end))
return false;
start++;
end--;
}
return true;
}
編程判斷字符串是否為回文 判斷一個字符串是否是回文,例如單詞‘level'
#include <stdio.h>
#include <string.h>
int main()
{
char a[100]= {0};
int i = 0;
int len = 0;
printf("please input character string:\n");
gets(a);
len = strlen(a); //計算輸入字符串的長度;
for(i = 0; i < (len / 2); i++) //只需要判斷前一半(len/2)長度就好了
{
if(a[i] != a[len - 1 - i]) //判斷是否為回文數(shù);
{
printf("不是回文數(shù)\n");
return 0;
}
}
printf("是回文數(shù)\n");
return 0;
}
到此這篇關(guān)于java中利用棧實現(xiàn)字符串回文算法的文章就介紹到這了,更多相關(guān)字符串回文算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring5.2.x 源碼本地環(huán)境搭建的方法步驟
這篇文章主要介紹了Spring5.2.x 源碼本地環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
idea中創(chuàng)建jsp項目的詳細實戰(zhàn)步驟
才學javaWeb,以防自己忘記創(chuàng)建項目的過程,所以淺淺的記錄一下吧,下面這篇文章主要給大家介紹了關(guān)于idea中創(chuàng)建jsp項目的詳細步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09
Java實現(xiàn)MySQL數(shù)據(jù)實時同步至Elasticsearch的方法詳解
MySQL擅長事務(wù)處理,而Elasticsearch(ES)則專注于搜索與分析,將MySQL數(shù)據(jù)實時同步到ES,可以充分發(fā)揮兩者的優(yōu)勢,下面我們就來看看如何使用Java實現(xiàn)這一功能吧2025-03-03
Java處理字節(jié)類型數(shù)據(jù)的實現(xiàn)步驟
字節(jié)(Byte)是計算機信息技術(shù)用于計量存儲容量的一種基本單位,通常簡寫為B,在ASCII編碼中1Byte可以表示一個標準的英文字符,包括大寫字母、小寫字母、數(shù)字、標點符號和控制字符等,本文給大家介紹了Java如何優(yōu)雅的處理字節(jié)類型數(shù)據(jù),需要的朋友可以參考下2024-07-07
java 多線程Thread與runnable的區(qū)別
這篇文章主要介紹了java 多線程Thread與runnable的區(qū)別的相關(guān)資料,java線程有兩種方法繼承thread類與實現(xiàn)runnable接口,下面就提供實例幫助大家理解,需要的朋友可以參考下2017-08-08

