java中利用棧實(shí)現(xiàn)字符串回文算法
問(wèn)題
給定一個(gè)由多個(gè)a和b組成的字符串?dāng)?shù)組,字符串中有一個(gè)特殊的字符X,位于字符串的正中間,例如(aaaabbbbXabaabbbb),如何判定該字符串是否回文
簡(jiǎn)單算法
定義兩個(gè)下標(biāo)分別指向字符串的頭和尾,每次比較兩個(gè)下標(biāo)位置的值是否相等,如果不相等,那么輸入的
字符串不是回文,如果相等,左邊的下表加1,右邊的下表減1,重復(fù)上述步驟直至兩個(gè)下標(biāo)都指向字符串的正中間或者確定字符串不是回文
/**
* 判斷字符串是否是回文
*/
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.在遍歷過(guò)程中將經(jīng)過(guò)的每個(gè)字符(X以前的字符)入棧
3.對(duì)于鏈表的后一半,把每個(gè)元素與棧頂元素比較,如果相等,執(zhí)行一次出棧操作,并且移動(dòng)到下一個(gè)元素繼續(xù)比較
4.如果比較時(shí)出現(xiàn)不相等,那么輸入的字符串不是回文
5.繼續(xù)這個(gè)過(guò)程,直至棧空或者字符串不是回文
/**
* 利用棧判斷字符回文
*/
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++;
}
//將來(lái)
return true;
}
Java判斷是否為回文字符串
題目描述
輸入一段字符串序列,字符串可能包括字母,數(shù)字,標(biāo)點(diǎn)符號(hào)等類型字符,在判斷該字符序列是否為回文時(shí),只需判斷字母和數(shù)字類型,其它類型自動(dòng)忽略。
如:“A man, a plan, a canal: Panama” 是一段回文字符串
“race a car”則不是回文字符串
實(shí)現(xiàn)方法
從字符串的兩端逐個(gè)進(jìn)行比較,若遇到非字母或數(shù)字字符則將索引值加一或減一,如果兩端字符不同,直接返回false,直到索引值在中間相遇也沒(méi)有返回false則證明該字符串是回文字符串。
public static boolean isPalindrome(String str){
if(str.equals(""))
return true;
str = str.toLowerCase();//將字符串的所有大寫字母轉(zhuǎn)小寫
int start = 0, end = str.length() - 1;
//從字符兩端分別逐個(gè)對(duì)比字符,不同則直接返回false
while (start < end){
//過(guò)濾掉非字母和數(shù)字字符
while (!(str.charAt(start) >= 'a' && str.charAt(start) <= 'z' || str.charAt(start) >= '0' && str.charAt(start) <= '9'))
start++;
//過(guò)濾掉非字母和數(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;
}
編程判斷字符串是否為回文 判斷一個(gè)字符串是否是回文,例如單詞‘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); //計(jì)算輸入字符串的長(zhǎng)度;
for(i = 0; i < (len / 2); i++) //只需要判斷前一半(len/2)長(zhǎng)度就好了
{
if(a[i] != a[len - 1 - i]) //判斷是否為回文數(shù);
{
printf("不是回文數(shù)\n");
return 0;
}
}
printf("是回文數(shù)\n");
return 0;
}
到此這篇關(guān)于java中利用棧實(shí)現(xiàn)字符串回文算法的文章就介紹到這了,更多相關(guān)字符串回文算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解java中jvm虛擬機(jī)棧的作用
- 深入JVM剖析Java的線程堆棧
- Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)詳解
- java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):棧
- Java數(shù)組與堆棧相關(guān)知識(shí)總結(jié)
- Java 實(shí)現(xiàn)棧的三種方式
- java括號(hào)匹配算法求解(用棧實(shí)現(xiàn))
- JAVA jvm系列--java內(nèi)存區(qū)域
- JAVA JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)詳解
- Java 內(nèi)存模型(JVM)
- Java的最大棧深度與JVM核心知識(shí)介紹
相關(guān)文章
IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問(wèn)題
這篇文章主要介紹了IDEA2020 Plugins不能用的解決辦法,文中給大家介紹了Intellij IDEA 2020.1 的Plugins 搜索不了插件,連接超時(shí)的問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-06-06
Spring?Cloud?Sleuth?和?Zipkin?進(jìn)行分布式跟蹤使用小結(jié)
分布式跟蹤是一種機(jī)制,我們可以使用它跟蹤整個(gè)分布式系統(tǒng)中的特定請(qǐng)求,分布式跟蹤允許您跟蹤分布式系統(tǒng)中的請(qǐng)求,本文給大家介紹Spring?Cloud?Sleuth?和?Zipkin?進(jìn)行分布式跟蹤使用小結(jié),感興趣的朋友一起看看吧2022-03-03
關(guān)于FastJson?long?溢出問(wèn)題的小結(jié)
這篇文章主要介紹了關(guān)于FastJson?long?溢出問(wèn)題的小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-01-01
SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案
這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
springboot+quartz以持久化的方式實(shí)現(xiàn)定時(shí)任務(wù)的代碼
這篇文章主要介紹了springboot+quartz以持久化的方式實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

